{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 对正则参数进行调优"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 导入工具包"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-10-27T02:31:00.903356Z",
     "start_time": "2018-10-27T02:30:56.524106Z"
    },
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "from sklearn.metrics import log_loss\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "import graphviz\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 读取数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-10-27T02:31:05.300608Z",
     "start_time": "2018-10-27T02:31:02.406442Z"
    },
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "dpath = './data/'\n",
    "train = pd.read_csv(dpath +\"RentListingInquries_FE_train.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-10-27T02:31:05.403614Z",
     "start_time": "2018-10-27T02:31:05.304608Z"
    },
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "X_train = train.drop('interest_level', axis = 1)\n",
    "y_train = train['interest_level']"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 参数调试"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-10-27T02:31:06.219660Z",
     "start_time": "2018-10-27T02:31:06.210660Z"
    },
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# prepare cross validation\n",
    "kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "第1个程序初步确定了n_estimators是：220，第2个程序确定了最优max_depth是: 5, 最优min_child_weight是: 1。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-10-27T02:31:08.328781Z",
     "start_time": "2018-10-27T02:31:08.302779Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'reg_alpha': [1.5, 2], 'reg_lambda': [0.5, 1, 2]}"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "reg_alpha = [ 1.5, 2]    \n",
    "reg_lambda = [0.5, 1, 2]      \n",
    "\n",
    "param_test3 = dict(reg_alpha=reg_alpha, reg_lambda=reg_lambda)\n",
    "param_test3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-10-27T04:10:30.065773Z",
     "start_time": "2018-10-27T02:31:11.438959Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\starwin\\Anaconda3\\lib\\site-packages\\sklearn\\model_selection\\_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.58915, std: 0.00395, params: {'reg_alpha': 1.5, 'reg_lambda': 0.5},\n",
       "  mean: -0.58864, std: 0.00370, params: {'reg_alpha': 1.5, 'reg_lambda': 1},\n",
       "  mean: -0.58938, std: 0.00356, params: {'reg_alpha': 1.5, 'reg_lambda': 2},\n",
       "  mean: -0.58881, std: 0.00372, params: {'reg_alpha': 2, 'reg_lambda': 0.5},\n",
       "  mean: -0.58920, std: 0.00353, params: {'reg_alpha': 2, 'reg_lambda': 1},\n",
       "  mean: -0.58925, std: 0.00335, params: {'reg_alpha': 2, 'reg_lambda': 2}],\n",
       " {'reg_alpha': 1.5, 'reg_lambda': 1},\n",
       " -0.5886399898203378)"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb3 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=220,  #第一轮参数调整得到的n_estimators最优值\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "\n",
    "gsearch3 = GridSearchCV(xgb3, param_grid = param_test3, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch3.fit(X_train , y_train)\n",
    "\n",
    "gsearch3.grid_scores_, gsearch3.best_params_, gsearch3.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-10-27T04:12:45.735533Z",
     "start_time": "2018-10-27T04:12:45.704531Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\starwin\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\starwin\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\starwin\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\starwin\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\starwin\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\starwin\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\starwin\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([705.08152828, 685.47380686, 703.48523698, 713.93843498,\n",
       "        690.77491002, 648.02166476]),\n",
       " 'mean_score_time': array([1.86090646, 1.80330315, 1.91370945, 1.85190597, 1.82590446,\n",
       "        1.60909204]),\n",
       " 'mean_test_score': array([-0.58914533, -0.58863999, -0.58937752, -0.5888114 , -0.58919512,\n",
       "        -0.58925376]),\n",
       " 'mean_train_score': array([-0.5165805 , -0.51831375, -0.52085786, -0.52000675, -0.5213971 ,\n",
       "        -0.52355846]),\n",
       " 'param_reg_alpha': masked_array(data=[1.5, 1.5, 1.5, 2, 2, 2],\n",
       "              mask=[False, False, False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'param_reg_lambda': masked_array(data=[0.5, 1, 2, 0.5, 1, 2],\n",
       "              mask=[False, False, False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'params': [{'reg_alpha': 1.5, 'reg_lambda': 0.5},\n",
       "  {'reg_alpha': 1.5, 'reg_lambda': 1},\n",
       "  {'reg_alpha': 1.5, 'reg_lambda': 2},\n",
       "  {'reg_alpha': 2, 'reg_lambda': 0.5},\n",
       "  {'reg_alpha': 2, 'reg_lambda': 1},\n",
       "  {'reg_alpha': 2, 'reg_lambda': 2}],\n",
       " 'rank_test_score': array([3, 1, 6, 2, 4, 5]),\n",
       " 'split0_test_score': array([-0.58212293, -0.58241262, -0.58364696, -0.58268586, -0.58298218,\n",
       "        -0.58366376]),\n",
       " 'split0_train_score': array([-0.51808024, -0.52009783, -0.52294139, -0.52278408, -0.5230295 ,\n",
       "        -0.52544603]),\n",
       " 'split1_test_score': array([-0.58773057, -0.58704075, -0.58746817, -0.58691217, -0.58840725,\n",
       "        -0.58754921]),\n",
       " 'split1_train_score': array([-0.51693942, -0.51877524, -0.5210567 , -0.51946373, -0.52117783,\n",
       "        -0.52313347]),\n",
       " 'split2_test_score': array([-0.59059075, -0.58912327, -0.58978316, -0.5897551 , -0.58944892,\n",
       "        -0.59027775]),\n",
       " 'split2_train_score': array([-0.51617428, -0.51811925, -0.52036973, -0.5194083 , -0.52155083,\n",
       "        -0.52317333]),\n",
       " 'split3_test_score': array([-0.5928447 , -0.59223708, -0.59244936, -0.59131426, -0.59225719,\n",
       "        -0.59155354]),\n",
       " 'split3_train_score': array([-0.51687785, -0.51818762, -0.52051062, -0.51959738, -0.52093989,\n",
       "        -0.5242079 ]),\n",
       " 'split4_test_score': array([-0.59243869, -0.59238737, -0.59354122, -0.59339102, -0.59288121,\n",
       "        -0.59322576]),\n",
       " 'split4_train_score': array([-0.51483071, -0.51638881, -0.51941085, -0.51878028, -0.52028742,\n",
       "        -0.52183157]),\n",
       " 'std_fit_time': array([37.53509584, 16.81555304, 43.1426912 , 56.08130116, 31.39896082,\n",
       "        33.10741924]),\n",
       " 'std_score_time': array([0.14091288, 0.0763336 , 0.22448076, 0.14673324, 0.08406516,\n",
       "        0.2004461 ]),\n",
       " 'std_test_score': array([0.00394811, 0.00370279, 0.00356148, 0.00372169, 0.00352843,\n",
       "        0.00335459]),\n",
       " 'std_train_score': array([0.00106707, 0.00119625, 0.00116904, 0.00141693, 0.00091399,\n",
       "        0.00120796])}"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch3.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-10-27T04:14:24.634189Z",
     "start_time": "2018-10-27T04:14:23.967151Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.588640 using {'reg_alpha': 1.5, 'reg_lambda': 1}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\starwin\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\starwin\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\starwin\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\starwin\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\starwin\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\starwin\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Users\\starwin\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZgAAAELCAYAAADkyZC4AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzs3Xd4FPX2x/H3Sae30EF6bwECBFAR\nFAULFhAIooBSVBC7P/tV9F4VvVxR8Sq9SFMUaSKWi50AofcqJdQQpAQIaef3x04whEACZLPZzXk9\nzz5smZk9Q/tk5sx8v6KqGGOMMTnNz9MFGGOM8U0WMMYYY9zCAsYYY4xbWMAYY4xxCwsYY4wxbmEB\nY4wxxi0sYIwxxriFBYwxxhi3sIAxxhjjFgGeLsCTQkNDtWrVqp4uwxhjvMqKFSuOqGrprJZza8CI\nSCdgJOAPjFXVtzN83hd4F9jnvPWRqo51PhsO3IbrKOt74HFVVRHpAbzkbHOBqj6XYZvdgC+AFqoa\nfan6qlatSnT0JRcxxhiTgYjszs5ybjtFJiL+wCigM1AfiBSR+pksOlNVw5xHWri0AdoCjYGGQAug\nnYiUwhVIN6pqA6CsiNyY7juLAEOBpe7aL2OMMdnjzh5MS2C7qu5U1URgBnBnNtdVIAQIAoKBQOAQ\nUB3YqqqxznI/AF3TrfcGMBxIuPryjTHGXA13BkxFYG+61zHOexl1FZG1IjJLRCoDqOoSYDFwwHks\nUtVNwHagrohUFZEA4C6gMoCINAUqq+r8SxUlIgNFJFpEomNjYy+1qDHGmKvgzh6MZPJexrkB5gHT\nVfWsiDwMTAI6iEhNoB5QyVnuexG5XlV/EZFHgJlAKvAHUF1E/ID/AH2zKkpVRwOjAcLDwy+YqyAp\nKYmYmBgSEuwgKC8KCQmhUqVKBAYGeroUY0wW3BkwMThHF45KwP70C6hqXLqXY4B3nOd3A1GqGg8g\nIguBCOAXVZ2HK5gQkYFAClAEV6/mJxEBKAfMFZEuWTX6Lyg6JoYiRYpQtWpVnG2ZPEJViYuLIyYm\nhmrVqnm6HGNMFtx5imw5UEtEqolIENATmJt+AREpn+5lF2CT83wPrqZ+gIgEAu3SPhORMs6vJYBH\ncV2ddlxVQ1W1qqpWBaKAyw4XgISEBEqVKmXhkgeJCKVKlbKjS2O8hNuOYFQ1WUSGAItwXVI8XlU3\niMgwIFpV5wJDRaQLkAwc5e9TXLOADsA6XKfVvnWOXABGikgT5/kwVd2a07VbuORd9mdjjPdw630w\nqvoN8E2G915N9/wF4IVM1ksBBl1km5HZ+N4bLrdWY4zJD1SVsb/+SbfmlShRKMit35Wv7+Q3xpj8\nJDVV+cfcDUyJ2o0I9L+uulu/z8Yiy+d++uknbr/99qte5lI2b95M69atCQ4O5r333rvocn379qVa\ntWqEhYURFhbG6tWrr/g7jTHnS01VXpy9jilRuxnUrjoPXev+C2XsCCaPU1VUFT8/7/1ZoGTJknzw\nwQd8/fXXWS777rvv0q1bt1yoypj8IyVVeXbWGr5auY/HOtTkqY61c6WfaQFzCa/P28DG/SdydJv1\nKxTlH3c0uOQyu3btonPnzrRv354lS5bwxBNP8Mknn3D27Flq1KjBhAkTKFy4MN988w1PPfUUoaGh\nNGvWjJ07dzJ/fub3mS5btownnniCM2fOUKBAASZMmECdOnXOW+a1115jx44d7Nu3j7179/Lcc88x\nYMAAAOLj4+nWrRvr16+nefPmfPbZZ4gIw4YNY968eZw5c4Y2bdrw6aefXvAXt0yZMpQpU4YFCxZc\nxe+cMeZKJKWk8tTna5i3Zj9PdazN0Btr5dp3e++PxT5uy5YtPPDAA3z//feMGzeOH374gZUrVxIe\nHs6IESNISEhg0KBBLFy4kN9++42sRiWoW7cuv/zyC6tWrWLYsGG8+OKLmS63du1aFixYwJIlSxg2\nbBj797tuXVq1ahXvv/8+GzduZOfOnfz+++8ADBkyhOXLl7N+/XrOnDlzLuA++eQTPvnkk8ve75de\neonGjRvz5JNPcvbs2cte3xjzt8TkVIZOX8W8Nft5vnPdXA0XsCOYS8rqSMOdqlSpQkREBPPnz2fj\nxo20bdsWgMTERFq3bs3mzZupXr36uRsOIyMjGT169EW3d/z4cfr06cO2bdsQEZKSkjJd7s4776RA\ngQIUKFCA9u3bs2zZMooXL07Lli2pVMk1sEJYWBi7du3i2muvZfHixQwfPpzTp09z9OhRGjRowB13\n3MHDDz982fv81ltvUa5cORITExk4cCDvvPMOr776atYrGmMucDY5hcFTV/LDpsO8cnv9XOm5ZGQB\nk0cVKlQIcPVgOnbsyPTp08/7fNWqVZe1vVdeeYX27dsze/Zsdu3axQ033JDpchlPb6W9Dg4OPvee\nv78/ycnJJCQk8OijjxIdHU3lypV57bXXruomyPLly5/7rn79+l3yggBjzMUlJKUwaMoKft4ayxt3\nNeT+iCoeqcNOkeVxERER/P7772zfvh2A06dPs3XrVurWrcvOnTvZtWsXADNnzrzkdo4fP07Fiq6x\nRidOnHjR5ebMmUNCQgJxcXH89NNPtGjR4qLLpoVJaGgo8fHxzJo16zL27EIHDhwAXKH69ddf07Bh\nw6vanjH50enEZB6atJxftsXyTtdGHgsXsIDJ80qXLs3EiROJjIykcePGREREsHnzZgoUKMDHH39M\np06duPbaaylbtizFihW76Haee+45XnjhBdq2bUtKSspFl2vZsiW33XYbERERvPLKK1SoUOGiyxYv\nXpwBAwbQqFEj7rrrrvPCKH0P5uDBg1SqVIkRI0bw5ptvUqlSJU6ccF08ceutt57r89x33300atSI\nRo0aceTIEV5++eXL+r0yJr+LP5tM3wnLWbIjjve6NaFHi2s8Wo+oXjCgcL4RHh6uGWe03LRpE/Xq\n1fNQRZcnPj6ewoULo6oMHjyYWrVq8eSTT17x9l577TUKFy7MM888k4NV5jxv+jMyJrecSEii34Tl\nrN57jP/0CKNLk4v/cHi1RGSFqoZntZwdwXixMWPGEBYWRoMGDTh+/DiDBmU6uo4xxscdP53E/WOX\nsmbvMT6KbOrWcLkcdgTjxUcwmZkwYQIjR4487722bdsyatQoD1WU87z9z8iYnHT0VCL3j1vKtkPx\nfHxfM26qX9bt35ndIxi7iszH9OvXj379+nm6DGNMLjgSf5beY5ey88gpRj/QnBvqlPF0SeexgDHG\nGC90+EQCvcYuJeav00zo24K2NUM9XdIFLGCMMcbLHDh+hl5jlnLoRAIT+7UkonopT5eUKQsYY4zx\nIjF/nabXmKX8dSqRKQ+1pHmVkp4u6aIsYIwxxkvsjjtFrzFLOZmQxJT+rQirXNzTJV2SWy9TFpFO\nIrJFRLaLyPOZfN5XRGJFZLXz6J/us+EiskFENonIB+KMWSIiPURkrfPZ8HTLPywi65zt/CYi9d25\nb74iN+aDmTp1Ko0bN6Zx48a0adOGNWvWXPG2jMmvdsbG0+PTKE4lJjNtQESeDxdw4xGMiPgDo4CO\nQAywXETmqurGDIvOVNUhGdZtA7QFGjtv/Qa0E5F1wLtAc1WNFZFJInKjqv4ITFPVT5z1uwAjgE7u\n2r/c4gvzwVSrVo2ff/6ZEiVKsHDhQgYOHMjSpUs9XZYxXmPboZP0GruU1FRlxsAI6pYr6umSssWd\np8haAttVdSeAiMwA7gQyBkxmFAgBggABAoFDQHVgq6qmjU3/A9AV+FFV00/cUsjZxtVZ+DwcXHfV\nmzlPuUbQ+e1LLuJr88G0adPm3POIiAhiYmKu5HfOmHxp04ET9B67FD8/YcbACGqVLeLpkrLNnT8W\nVwT2pnsd47yXUVfnlNcsEakMoKpLgMXAAeexSFU3AduBuiJSVUQCgLuAymkbEpHBIrIDGA4MdcdO\n5RZfnQ9m3LhxdO7c+Wp+a4zJN9bvO07kmCgC/f2Y6WXhAu49gslsPs6MRxXzgOmqelZEHgYmAR1E\npCZQD6jkLPe9iFyvqr+IyCPATCAV+APXUY1r46qjgFEi0gt4GehzQVEiA4GBANdck8VAcFkcabiT\nL84Hs3jxYsaNG8dvv/12tb89xvi81XuP8cC4pRQJCWT6gAiuKVXQ0yVdNncGTAzpji5whcX+9Auo\naly6l2OAd5zndwNRqhoPICILgQjgF1WdhyuY0sIis6GBZwD/zawoVR0NjAbXUDGXt0u5x9fmg1m7\ndi39+/dn4cKFlCqVN6/ZNyaviN51lL4TllOyUBDTBrSiUgnvCxdw7ymy5UAtEakmIkFAT2Bu+gVE\npHy6l12ATc7zPbia+gEiEgi0S/tMRMo4v5YAHgXGOq/TzwV6G7Atx/fIA3xhPpg9e/Zwzz33MGXK\nFGrXrn3JOo3J76J2xvHA+GWUKRLMzEERXhsu4MYjGFVNFpEhwCLAHxivqhtEZBgQrapzgaHOFV/J\nwFGgr7P6LKADsA7XabVvnSMXgJEi0sR5PkxVtzrPh4jITUAS8BeZnB7zRunng0mbo/7NN9+kdu3a\n5+aDCQ0NpWXLlpfcznPPPUefPn0YMWIEHTp0uOhyafPB7Nmz59x8MFu3bs102fTzwVStWvWC+WAA\nHn74YYYNG0ZcXByPPvooAAEBAWQcZNQYA79tO0L/ycupXKIgU/u3okzREE+XdFVsNGUvHk3Z5oMx\nxncs3nKYQVNWUD20EJ/1b0Vo4eCsV/IQmw8mH7D5YIzxDd9vPMSgySuoVaYw0wdE5OlwuRx2BOPF\nRzCZsflgjPEuC9cd4LHpq2hQsRiT+7WkWMFAT5eUJZsP5iqo6gVXU3kLX58PJj//QGR8z5zV+3jq\n8zWEVS7OxH4tKBKS98PlctgpsgxCQkKIi4uz/8jyIFUlLi6OkBDvbnwaAzBrRQxPzlxNeJUSTH6w\npc+FC9gRzAUqVapETExMlnfGG88ICQk5d8OnMd5qxrI9vDB7HW1rhDLmgXAKBPl7uiS3sIDJIDAw\n8Nzd8cYYk9OmLNnFK3M20K52aT69vzkhgb4ZLmABY4wxuWbcb3/yxvyN3FSvLKPua0pwQC6GS2oK\nnDkGp+NcjxJVoGgFt36lBYwxxuSC//60g3e+3UznhuUY2bMpQQFX0QJPTYWEY3D66N+BkfY4k/Ze\nhs/OHOO84SBvGwEtHrrq/boUCxhjjHGzD37cxojvt9KlSQVGdG9CgH+6cElNhbPHnUC4WGBkDIu/\nQFMz/zL/YCgUCgVLQoGSUK4xFCyV7lHS9Sjj/jkZLWCMMSanqMLZE+eOIPR0HAuXbeD4pu2MrQgd\nCgXg94UTEOcC4yhoZmP2Av5B5wdDmfoZwiJdYKS9DiwIeeQ2CwsYY4zJjCokxp8fBJkdYZw+mu60\nVBykJp/bhAC3ArcGgv4VgJxNFwyl67h+LVDy4oERVDjPhMWVsIAxxvg+VUg6fWEwZBUYKYmZb0/8\nzz9qKFUDKrc8FxhasCTT1p/i8w2naRdWlye6ROAXUtSrw+JKWMAYY7xP4unzjxpOZ+N5ytnMtyV+\nzlGEExglq0HB5n+Hx3lHGM7z4KLgl3mTPjVVeWXOeqau38ND11bjydvqee3IIFfLAsYY41lJCVlf\nAXU6w/vJZy6yMYECJf4Og+KVoUKT809BZQyMkOIXDYvLlZKqvPDVWj6PjuGRG2rw3C118m24gAWM\nMSYnJZ89PxwuGRjOe0mnLr69kOJ/h0HRClCu0fmnpjIGRoHi4OeZGxeTU1J5dtZaZq/ax9Aba/Hk\nTbXydbiABYwx5mJSkjK5PDaLwEg8efHtBRf7OxwKl3WuiCp5YWCkhUaBEuDvHf9FJaWk8uTM1cxf\ne4Bnbq7NkA61sl4pH/COPz1jzNVJSc5waWyGeyoueP8v170ZFxNUJF0whEKoc0VUwRIXhkXBUk5Y\n+N5gjgCJyak8Nn0lizYc4sVb6zLw+hqeLinPsIAxxtukpjihkNkVUBcJjIRLhUXhDE3uGunCIZPA\nKFASAoJyb3/zsISkFAZPXcmPmw/zjzvq06+tjWOYnlsDRkQ6ASMBf2Csqr6d4fO+wLvAPuetj1R1\nrPPZcOA2XFMKfA88rqoqIj2Al5xtLlDV55zlnwL6A8lALPCgqu525/4Zc9XODfmR2RVQ6V6nv2Iq\n45Af6QUW/PuIoWApKF7l4jfkpYVFoE1/cCUSklIYMDmaX7cd4c27GtI7ooqnS8pz3BYwIuIPjAI6\nAjHAchGZq6obMyw6U1WHZFi3DdAWaOy89RvQTkTW4Qqk5qoaKyKTRORGVf0RWAWEq+ppEXkEGA70\ncNf+GXOB84b8yGZgZHfIj4KlLj7kR/qwCCqYu/ucT51OTKb/pGiW7IxjeNfGdG9R2dMl5UnuPIJp\nCWxX1Z0AIjIDuBPIGDCZUSAECMJ1M2wgcAioDmxV1bTJWn4AugI/quridOtHAb1zYidMPpVhyI/M\nL5nN8PzMX9kf8qNsg4vcwZ3u1zw05If5W/zZZB6csJzo3UcZ0b0Jdze1+Ykuxp0BUxHYm+51DNAq\nk+W6isj1wFbgSVXdq6pLRGQxcABXwHykqptEpARQV0SqOtu7C1cIZfQQsDDH9sR4N1U4ezL791ik\nHWGkG/LjPH4B5wdDmbqXGPLD+dXLh/wwLicSkug7fhlrYo4zsmdT7mji3uHuvZ07Ayazf00ZTxzP\nA6ar6lkReRiYBHQQkZpAPSDtR4PvReR6Vf3FOf01E0gF/sB1VPP3l4r0BsKBdpkWJTIQGAhwzTXX\nXNGOmTxIFaLHw6H1mQdGalLm62Uc8iO0JhRsdenACC5iYZEPHTudyAPjl7HpwAlG9WpGp4blPF1S\nnufOgIkB0p+YrATsT7+AqsalezkGeMd5fjcQparxACKyEIgAflHVebiCKS0szp2TEJGbcF0A0E5V\nMx0XQlVHA6MBwsPDL9IpNV5FFb55BpaPdYVCodC/h/yodOVDfhiT5uipRHqPXcr2w/F80rs5N9Yr\n6+mSvII7A2Y5UEtEquG6Sqwn0Cv9AiJSXlUPOC+7AJuc53uAASLyFq4joXbA+846ZVT1sHO67FGg\nu/N+U+BToJOqHnbjfpm8RBUW/p8rXNo8Bh3fsKMLk6NiT56l99il7Io7xZg+4bSrXdrTJXkNtwWM\nqiaLyBBgEa5Liser6gYRGQZEq+pcYKiIdMF1afFRoK+z+iygA7AO12m1b50jF4CRItLEeT5MVbc6\nz98FCgNfOMMz7FHVLu7aP5MHqMKiF2HZpxAx2MLF5LhDJxLoNSaK/ccSmNC3BW1qhnq6JK8iqvn3\nLFF4eLhGR0d7ugxzJVTh+1fgjw+h1cPQ6W0LF5Oj9h87Q68xUcSePMuEfi1pWa2kp0vKM0RkhaqG\nZ7Wc3clvvI8q/PCaK1xa9LdwMTlu79HT9BobxbFTSUx+qBXNq5TwdEleyQLGeBdV+N+b8Pv70Lwf\ndH7XwsXkqN1xp4gcHUX82WSmDmhF40rFPV2S17KAMd7lp7fh1/eg2QNw2wi7AszkqB2x8fQaE0Vi\ncirTB0bQoEIxT5fk1SxgjPf4eTj8/DaE9YbbR1q4mBy19dBJeo1ZCigzBramTrkini7J61nAGO/w\ny3uw+J/QJBK6fGDhYnLUxv0n6D1uKQF+wrQBralZprCnS/IJ9q/U5H2/vQ//ewMadYc7R3lsxkLj\nm9bFHCdyTBTBAX7MHGThkpPsCMbkbX98CD/8Axp2hbv+a+FictSqPX/xwPhlFA0JZMbACCqXtNGo\nc5IFjMm7lnwM370M9e+Cu0d7zfS5xjss33WUfhOWU6pwENMGRFCxeAFPl+Rz7BTZFUhOSSV611FP\nl+Hblo6GRS9AvS7QdayFi8lRS3bE0Wf8MsoUDWbmwNYWLm5iAXMF3v9hG5Fjoliz95inS/FNy8fC\nwmeh7u3QbbzPzuVuPOPXbbH0m7iMisULMGNgBOWK2Yye7mIBcwX6X1eNMkVCGDJ9JcfPXGQYeHNl\noifAgqehdmfoNsHCxeSoxZsP89CkaKqWKsSMgRGUKWLh4k4WMFegeMEgPohsyoFjCfzfrLXk5/Hc\nctTKyTD/Cah1M3SfBAGZzSVnzJX5bsNBBk6JpnbZwkwfEEGpwsGeLsnnWcBcoeZVSvBcpzp8u+Eg\nk/7Y5elyvN+qqTB3KNS8CbpPgQD7x29yzoK1B3h06koaVCjG1P4RlChkP7zkBguYq9D/2urcWLcM\n//xmE2tjrB9zxdbMgDmDofoN0GMqBNppC5Nz5qzex2PTV9L0muJMeaglxQrYadfcYgFzFfz8hPfu\nbULpwsEMnmb9mCuy9gv4+hGodh1ETrdwMTnqi+i9PDFzNa2qlWJiv5YUCbFwyU0WMFepRKEgPuzV\njAPHEnj+S+vHXJb1X8LsgVClLUTOhEC7VNTknGlL9/DsrLVcWzOU8X1bUCjYLnXPbRYwOaB5lRI8\ne0sdFq4/yOQluz1djnfYMBu+HACVI6DXTAiyO6hNzpm8ZBcvzl5H+zqlGfNAOAWCbAQIT7CAySED\nrqtOh7pl+OeCTayLOe7pcvK2jXNh1kNQqQXc9wUEFfJ0RcaHjP11J6/O2UDH+mX55P7mhARauHiK\nWwNGRDqJyBYR2S4iz2fyeV8RiRWR1c6jf7rPhovIBhHZJCIfiLhmlRKRHiKy1vlseLrlrxeRlSKS\nLCLd3LlfmfHzE/59bxNKFQ5i8LSVnEiwfkymNi+AWf2gYnPoPQuCbWBBk3NGLd7Omws2cVuj8nx8\nXzOCAyxcPMltASMi/sAooDNQH4gUkfqZLDpTVcOcx1hn3TZAW6Ax0BBoAbQTkVLAu8CNqtoAKCsi\nNzrb2QP0Baa5a5+yUqJQEB/1asq+Y2esH5OZLd/C532gfBMnXGy+DZMzVJX3f9jKu4u2cFdYBUb2\nDCPQ307QeJo7/wRaAttVdaeqJgIzgDuzua4CIUAQEAwEAoeA6sBWVY11lvsB6AqgqrtUdS2QmnO7\ncPmaVynJc7fU4Zt1B5kSZf2Yc7Z+B5/fD+UaQu+vIMRmCjQ5Q1V577stvP/DNro1r8S/u4cRYOGS\nJ7jzT6EisDfd6xjnvYy6Oqe8ZolIZQBVXQIsBg44j0WqugnYDtQVkaoiEgDcBVR24z5ckQHXVad9\nndK8OX8T6/dZP4btP8DM3lCmHtw/GwrYHOcmZ6gq//pmE6MW7yCy5TUM79oYfz/xdFnG4c6AyexP\nOeM5o3lAVVVtjOtoZBKAiNQE6gGVcIVSBxG5XlX/Ah4BZgK/AruA5MsqSmSgiESLSHRsbGzWK1wB\nPz/h393DrB8DsGMxzLgPSteG+7+GAiU8XZHxEarK6/M2MubXP+nTugr/urshfhYueYo7AyaG848u\nKgH70y+gqnGqetZ5OQZo7jy/G4hS1XhVjQcWAhHOOvNUtZWqtga2ANsupyhVHa2q4aoaXrp06cve\nqewqWSiIDyObEvPXGV74cl3+7Mfs/Bmm94SSNeD+OVCwpKcrMj4iNVV5cfZ6Jv6xiwHXVeO1Lg1w\nrgMyechlBYyI+IlI0WwuvhyoJSLVRCQI6AnMzbC98uledgE2Oc/34GrqB4hIINAu7TMRKeP8WgJ4\nFBh7OfuQm8KrluTZW+qwYN0BPstv/Zhdv8G0HlCiGvSZC4VKeboi4yNSUpXnvlzL9GV7ePSGGrx4\naz0Llzwqy4ARkWkiUlRECgEbgS0i8mxW66lqMjAEWIQrHD5X1Q0iMkxEujiLDXUuN14DDMV1FRjA\nLGAHsA5YA6xR1XnOZyNFZCPwO/C2qm516mwhIjHAvcCnIrIhO78B7jbwuurcUKc0b+SnfszuP2Dq\nvVD8GidcQj1dkfERySmpPP35amatiOGJm2rx7C11LFzyMMnq1I2IrFbVMBG5D9cprP8DVjh9E68W\nHh6u0dHRbv+eo6cSuXXkrwQH+jH/sWt9ezykPVEw5R4oVhH6zIciZT1dkfERSSmpPDFjNQvWHeDZ\nW+owuH1NT5eUb4nIClUNz2q57JwiC3ROU90FzFHVJC5s1ptLKFkoiA97ufoxz3/lw/2Yvcvhs25Q\ntDz0mWfhYnLM2eQUBk9dyYJ1B3j5tnoWLl4iOwHzKa6rtQoBv4hIFeCEO4vyRS2qluSZm+uwYO0B\nPlu6x9Pl5LyYFfDZPVC4tBMu5TxdkfERCUkpPPLZSr7beIjXuzSg/3XVPV2SyaYsA0ZVP1DViqp6\nq7rsBtrnQm0+Z9D1Tj9m3kbf6sfsWwlT7nZdJdZnPhSt4OmKjI84k5jCgMnR/G/zYf51dyP6tKnq\n6ZLMZchOk/9xp8kvIjJORFYCHXKhNp+TNl5ZyUKu+2NO+sL9MftXw5S7oEAxV7gUy+xeWmMu3+nE\nZB6cuJzfth9heLfG9Gp1jadLMpcpO6fIHlTVE8DNQGmgH/C2W6vyYaUKB5/rx7zg7f2Yg+tc4RJc\n1BUuxfPcoArGS51MSKLP+GUs/TOO/3QPo3u4/d3yRtkJmLRrAG8FJqjqGjK/S99kU4uqJXn65trM\nX3uAqd7ajzm0ASZ1gcBCrp5LiSqersj4iONnkrh/3DJW7TnGh5HNuKupHRV7q+wEzAoR+Q5XwCwS\nkSJ4eEBJX/Dw9TVoV7s0w+Z7YT/m8CZXuASEuO5zKVnN0xUZH3HsdCK9xy5lw/7jfHxfM25rXD7r\nlUyelZ2AeQh4HmihqqdxjXDcz61V5QN+fsKI7k0oUTCQId7Uj4ndApPuAL8A6DsfStXwdEXGR8TF\nnyVyzFK2HDrJ6PvDubmBXYno7bJzFVkqrnHEXhaR94A2zrD45iqVKhzMh5HN2HP0tHf0Y45sc4UL\nYuFictThkwlEjoliZ2w8Yx8Ip33dMp4uyeSA7FxF9jbwOK5hYjbiGt7lLXcXll+0rFaSp2+uw/y1\nB5i2LA/3Y+J2wMTbQVNd4RJay9MVGR9x8HgCPUdHsffoGSb0a8H1td03CK3JXQHZWOZWIMw5kkFE\nJgGrgBfcWVh+8ki7Giz98yivz9tIWOXiNKiQxybjSguX1CTouwBK1/F0RcZH7Dt2hl5jooiLT2Ty\nQy1pUdVG3PYl2R1NOf0MUXnsfz/vd34/ZhXxZy9rihv3Ovqn67RYcoLrarEy9TxdkfERe4+epsen\nSzh6ysLFV2UnYN4CVonIROe8b2P/AAAgAElEQVToZQXwL/eWlf+EFg7mg55N2R13ihfzSj/mr92u\ncEk67bparGwDT1dkfMSuI6fo8ekSTiYkM61/BM2usYnofFF2mvzTcU329ZXzaA384ua68qVW1Uvx\n9M11mLtmP9OX7c16BXc6tgcm3Q5nT8ADc6BcI8/WY3zG9sPxdP90CQnJqUwfEEGjSnZSxFdlpweD\nqh4g3WRhIrIHsHEb3OCRdjWI2hnHa/M2EFa5OPUrZHd+txx0PMZ15HLmOPSZA+Wb5H4NxidtOXiS\n+8ZGAcKMgRHULlvE0yUZN7rSKZPtTn438fMT/tMjjOIFAhk8bWXu92NO7Hc19E8fhftnQ4Wmufv9\nxmdt2H+cnqOX4O8nzBxk4ZIfXGnA5IEGge8KLRzMB5Ee6MecPOgKl1NHoPdXUKl57nyv8XlrY47R\na8xSCgT6M3Nga2qULuzpkkwuuOgpMhH5kMyDRDj/qjLjBhHVS/FUx9q8991WWtcoRWRLN5+RPHnI\nFS7xh1zhUrmFe7/P5Bsr9/xFn3HLKFYwkOkDIqhcsqCnSzK55FJHMNG4rhjL+IgGHsvOxkWkk4hs\nEZHtIvJ8Jp/3FZFYEVntPPqn+2y4iGwQkU0i8oE4E2+LSA8RWet8Njzd8sEiMtP5rqUiUjU7NeZl\nj95Qk+tqhfKPuRvYuN+Nc7zFx7p6Lif2w31fwDWt3PddJl9Z9udR7h+7lFKFg/h8UGsLl3zmokcw\nqjrpajYsIv7AKKAjEAMsF5G5qroxw6IzVXVIhnXbAG2Bxs5bvwHtRGQd8C7QXFVjRWSSiNyoqj/i\nGjPtL1WtKSI9gXeAHlezD56W1o+5deSvDJm2krmPXUvh4Gxdl5F9p464wuXYHug9C6q0ydntm3zr\nj+1HeGhSNBWKhzBtQARli4Z4uiSTy660B5MdLYHtqrpTVROBGcCd2VxXgRBcA2sGA4HAIaA6sFVV\nY53lfgC6Os/vBNJCcRZwY9pRjzcLLRzMyJ5N2RV3ipdm53A/5lSca1Tkv/6EXjOh6rU5t22Tr/2y\nNZZ+E5dzTcmCzBjY2sIln3JnwFQE0t/MEeO8l1FX55TXLBGpDKCqS4DFwAHnsUhVNwHbgboiUlVE\nAoC7gLSZiM59n6omA8eBUjm/W7mvdY1SPHlTbeas3s/M5Tl0f8zpozDlTji6AyJnQPV2ObNdk+/9\nb/Mh+k+KpkbpwkwfGEHpIsGeLsl4iDsDJrOjh4w/fs8DqqpqY1xHI5MARKQmUA/XKM4VgQ4icr2q\n/gU8AswEfgV2AWnX8Wbn+xCRgSISLSLRsbGxmaySNz3a/u9+zKYDV9mPOfOXaybK2K3QcyrUaJ8z\nRZp879v1Bxk0ZQV1yxdh2oBWlCwU5OmSjAdlZzTlDzJ5vCEiWZ3uiuHvowtwhcX+9AuoapyqnnVe\njgHSrou9G4hS1XhVjQcW4hpNAFWdp6qtVLU1sAXYlvH7nKObYsDRjEWp6mhVDVfV8NKlvWfUVn8/\nYUT3MIo698ecutL7Y84cgyl3uyYN6/EZ1LwpZws1+db8tfsZPG0lDSsW47P+rShe0MIlv8vOEUwI\nEIbrP/JtuBrvJYGHROT9S6y3HKglItVEJAjoSbrRAABEJP10dV2ATc7zPbia+gEiEgi0S/tMRMo4\nv5YAHgXGOuvMBfo4z7sB/9M8MaBXzildJJiRPcPYdeQUL3+9/vL7MQnH4bN74OB66D4Fat/snkJN\nvjN7VQxDp6+i+TUlmPJQK4qGBHq6JJMHZOeSpJpAB6evgYj8F/gO19Vh6y62kqomi8gQYBHgD4xX\n1Q0iMgyIVtW5uOaW6YLrNNdRoK+z+iygg7N9Bb5V1XnOZyNFJG3skmGqutV5Pg6YIiLbnW31zMa+\neZ02NUJ54qbajPh+KxHVS9KjRTbvj0k4AZ91hQNroPtkqNPJvYWafOPz6L3835driahWinF9wykY\nlMNXOhqvJVn9FCwiW4CWqnrceV0MWKqqdUVklap67Vgi4eHhGh0d7ekyLltKqtJn/DKW7zrKnCFt\nqVsui/HKzp6Ez7pBzHLoPgnq3ZE7hRqfN3Xpbl6avZ7raoUy+v5wCgT5e7okkwtEZIWqhme1XHZO\nkQ0HVovIBBGZiGuysfdEpBCuxrzJZf7O/TFFCwTy6NQs+jGJp2Bqd1e4dBtv4WJyzMTf/+Sl2evp\nULcMYx6wcDEXys5w/eOANsDXzuNaVR2rqqdU9Vl3F2gyl61+TOJpmNYD9kZB1zHQ4K7cL9T4pNG/\n7OC1eRu5pUFZPundnJBACxdzoexeptwCuA64lr+v9DIe1qZGKI/fWJvZq/bxRXTM+R8mnobpPWD3\n73D3aGjYNfONGHOZRi3ezr++2cztjcvzUa9mBAW4824H482yc5ny28DjwEbnMVRE3nJ3YSZ7hnSo\nSduapXhlzno2H3Tuj0k6AzN6wZ+/wl3/hcb3erZI4xNUlf98v5V3F23h7qYVeb9HGIH+Fi7m4rLz\nt+NWoKOqjlfV8UAn4Db3lmWyy99PeL9HU4qEBDJ46kpOnYqHmb1h509w5yho4pMX05lcpqoMX7SF\nkT9u497mlXjv3iYEWLiYLGT3b0j64fltftM8pnSRYD7oGUbMkWPs/rgrbP8BunwATe/zdGnGB6gq\nby7YxH9/2sF9ra7hna6N8ffz+mH+TC7IzgXrbwGrRGQxruFYrgdecGtV5rK1qVqUb8qPpcbRKKIb\n/YPwZg94uiTjA1JTldfmbWDykt30bVOVf9xRHx8YQ9bkkuxcRTYd1zAtXzmP1sAvbq7LXI6UJJjV\njxpHf2V8sSH0Xl2PLQdPeroq4+VSU5WXvl7H5CW7GXR9dQsXc9mydYpMVQ+o6lxVnaOqB4EoN9dl\nsislCWY9CJvnQ+d3ub3/KxQOdo1XdjrxCscrM/leSqry7Ky1TF+2lyHta/J857oWLuayXWmXzv6m\n5QUpyfBlf9g0Fzq9Da0GUqZICCN7hrEjNp5Xvt7g6QqNF0pOSeWpz1fz5coYnupYm2duqWPhYq7I\nlQaMTw0i6ZVSkmH2QNj4Ndz8T4h45NxHbWuGMrRDLb5cGcMX0Tk0f4zJF5JSUhk6YxVzVu/n/zrV\nZeiNtTxdkvFiF23yi8iHZB4kwvlXlZnclpoCXz8C67+Em16HNkMuWGTojbVY9udRXpmzniaVi1O7\nbBEPFGq8ydnkFIZMW8X3Gw/x8m316H9ddU+XZLzcpY5gooEVmTyigcfcX5rJVGoKzBkM6z6HG1+F\na5/IdDF/P2FkZBiFg13jlVk/xlxKQlIKD09ZwfcbDzHszgYWLiZHXPQIRlUnZXxPRMo5TX7jCamp\nMHcorJkO7V+C656+5OJp/Zje45by6pwNvHdvk0sub/KnM4kpDJgcze87jvDWPY2IbJnNKSCMycLl\n9mC+cUsVJmupqTD/cVj9GbR7Hto9l63V2tYM5bEOtZi1wvox5kKnzibTb+Iy/thxhHe7NbFwMTnq\ncgPGLiXxBFVY8BSsnAzXPQM3PH9Zqz9+Yy0iqpfklTnr2XrI7o8xLicTkpx5hf7iPz3C6Na8kqdL\nMj7mcgNmjFuqMBenCt88AysmwLVPQoeX4TIvGfX3Ez7o2ZTCwQEMtn6MAY6fSaL3uGWs3nuMjyKb\ncmdYRU+XZHzQZQWMqn7srkJMJlTh2+dh+Vho8xjc+I/LDpc0ZYqG8H6PpmyPjefVOXZ/TH7216lE\n7hsbxcb9x/lv7+Z0blTe0yUZH+XW4VBFpJOIbBGR7SJywXkdEekrIrEistp59E/32XAR2SAim0Tk\nA3Hu9BKRSBFZJyJrReRbEQl13m8iIkucz+aJSBbzCOdxqrDoJVj6CUQMho5vXHG4pLm2ViiPta/J\nrBUxzFoRk/UKxucciT9L5Jgoth6KZ/QD4XSsX9bTJRkf5raAERF/YBTQGagPRIpI/UwWnamqYc5j\nrLNuG6At0BhoiGvCs3YiEgCMBNqramNgLZB2E8hY4HlVbQTMBrx3tk1V+P4ViBoFrR6GW/551eGS\n5vGbarv6MV+vZ5v1Y/KVwycSiBwdxa64U4zv04L2dcp4uiTj49x5BNMS2K6qO1U1EZgB3JnNdRUI\nAYKAYCAQOITrIgMBCjlHNEWB/c46dfh7EM7vAe+cwlEVfnwd/vgQWvR3DQGTg8N0pPVjCgX72/0x\n+cjB4wn0HB3FvmNnmNivJdfWCvV0SSYfcGfAVATSXxcb47yXUVfndNcsEakMoKpLgMXAAeexSFU3\nqWoS8AiwDlew1AfGOdtZD3Rxnt8LVM6sKBEZKCLRIhIdGxt7VTuY41Thf2/Cb/+B5v2g87s5Gi5p\nyhQN4T89wtgeG88/rB/j8/YdO0OP0Us4fPIskx9sSUT1Up4uyeQT7gyYzP5nzDj0zDygqnO66wdg\nEoCI1ATqAZVwhVIHEbleRAJxBUxToAKuU2Rpc9M8CAwWkRVAESAxs6JUdbSqhqtqeOnSpa9m/3Le\nT2/Dr+9BswfgthHg574/nutqlWZI+5p8sSKGL60f47P2xJ2m+ydLOHoqkc/6tyK8aklPl2TyEXcG\nTAznH0VU4u/TWQCoapyqnnVejgGaO8/vBqJUNV5V44GFuOakCXPW26GqCnwOtHHe26yqN6tqc2A6\nsMM9u+UmPw+Hn9+GsN5w+0i3hkuax2+sRatqJXn56/VsP2z9GF/z55FT9Bi9hFOJyUwfEEFYZRtC\n0OQud/4vthyoJSLVRCQI6AnMTb+AiKS/PrILsMl5vgenqe8ctbRzPtsH1BeRtEOPjmnriEgZ51c/\n4GXgE7fslTv8+m9Y/E9oEuma6jgXwgUgwN+PDyKbUjDI1Y85k5iSK99r3G/74ZN0/3QJicmpTB8Q\nQcOKNtO5yX1u+59MVZNxXeG1CFcIfK6qG0RkmIik9UqGOpcirwGGAn2d92fhOgJZB6wB1qjqPFXd\nD7wO/CIia3Ed0fzLWSdSRLYCm3EdKU1w177lqN/ehx+HQaPucOco8PPP1a8v6/Rjth2O5x9z1+fq\ndxv32HzwBD0+dc0JOGNgBPXKe/cV+8Z7ietMU/4UHh6u0dHRnivgjw/hu5ehYVe4ezT4X3TsUbd7\nb9EWPlq8nRHdm3BPMxsyxFut33ec+8ctJTjAn2kDWlG9dGFPl2R8kIisUNXwrJbLnXMx5kJLPnaF\nS/27PB4uAE/cVIuW1Ury0mzrx3irNXuP0WtMFAWDApg5KMLCxXicBYwnLB0Ni16Ael2g61iPhwu4\n+jEfOv2YwVNXWT/Gy6zYfZTeY5dSrGAgMwdFUKVUIU+XZIwFTK5bPhYWPgt1b4du48E/0NMVnZPW\nj9l6+CSvzbX7Y7zF0p1xPDBuGaFFgvl8UGsqlSjo6ZKMASxgclf0BFjwNNTuDN0m5KlwSXN97dI8\nekMNZkbvZfYquz8mr/t9+xH6TlhO+eIFmDkwgvLFCni6JGPOsYDJLSsnw/wnoNbN0H0SBAR5uqKL\nevKm2rSsmtaPifd0OeYift4ay4MTl1OlVEFmDIygTNEQT5dkzHksYHLDqqmuqY5r3gTdp0BAsKcr\nuqS0+2NCAv0ZbPfH5Ek/bDzEgEnR1ChdmGkDIggtnLf/Tpn8yQLG3dbMgDmDofoN0OMzCPSOnzLL\nFXP1Y7YcOsnr86wfk5d8u/4AD3+2gnrlizB9QAQlC+Xdo2GTv1nAuNPaL+DrR6DaddBzGgR61/nx\ndk4/ZsbyvXy9ap+nyzHAvDX7GTxtFU0qF2dK/1YUK5j3+njGpLGAcZf1X8LsgVClLUTOhCDvvLLn\nqY61aVG1BC/OXseOWOvHeNJXK2N4fMYqmlcpwaQHW1I0xMLF5G0WMO6w4Wv4cgBUjoBe3hsucGE/\nJiHJ+jGe8PnyvTz9xRpa1yjFxH4tKBzs+XunjMmKBUxO2zQPvnwIKrWA+76AIO+/4a18sQKM6N6E\nzQetH+MJU6J289yXa7m+VmnG9WlBwSALF+MdLGBy0uYF8EVfqNAMes+CYN8ZquOGOmV45IYaTF+2\nlzmrrR+TW8b/9ievfL2em+qVYfQDzQkJzN3BUI25GhYwOWXLt/B5HyjfxAmXIp6uKMc93bE24VVK\n8OJX1o/JDZ/+vINh8zfSuWE5Pr6vOcEBFi7Gu1jA5ISt38Hn90O5htD7Kwjxzbk3Avz9+LBXU4IC\n/Kwf42Yf/riNtxZu5o4mFfgw0vV7boy3sb+1V2v7DzCzN5SpB/fPhgK+PWtg+WIFGNEjzOnHbPR0\nOT5HVRnx3Rb+/f1W7mlakfd7hBHgb/9MjXeyv7lXY8dimHEflK4N938NBUp4uqJc0b5OGR5uV4Pp\ny/ZYPyYHqSpvf7uZD/63nR7hlXn33ib4+4mnyzLmilnAXKmdP8P0nlCyBtw/BwqW9HRFuerpm//u\nx+y0fsxVU1XemL+JT3/eSe+Ia3jrnkYWLsbruTVgRKSTiGwRke0i8nwmn/cVkVgRWe08+qf7bLgz\nnfImEflARMR5P1JE1onIWhH5VkRCnffDRCTK2U60iLR0247t+g2m9YAS1aDPXChUym1flVcFOvfH\nBAX4MXjaKuvHXIXUVOXVORsY//ufPNi2Gm/c2RA/CxfjA9wWMCLiD4wCOgP1gUgRqZ/JojNVNcx5\njHXWbQO0BRoDDYEWQDsRCQBGAu1VtTGwFhjibGc48LqqhgGvOq/d4+RBKFndCZdQt31NXleheAFG\ndA9j04ETDJtv/ZgrkZqqvDh7HVOidjOoXXVeub0ezs9Sxng9dx7BtAS2q+pOVU0EZgB3ZnNdBUKA\nICAYCAQOAeI8CjlHNEWB/enWKeo8L5bu/ZzXqBsM+hkKl3HbV3iL9nVd/ZhpS/cwd437fst9UUqq\n8sysNcxYvpehHWryfKe6Fi7Gp7gzYCoCe9O9jnHey6irc7prlohUBlDVJcBi4IDzWKSqm1Q1CXgE\nWIcrQOoD45ztPAG8KyJ7gfeAF9ywT3/Lg5OFecrTN9emeZUSvPDlWv48csrT5XiFpJRUnpi5mq9W\n7uPpjrV56uY6Fi7G57gzYDL716IZXs8Dqjqnu34AJgGISE2gHlAJVyh1EJHrRSQQV8A0BSrgOkWW\nFiSPAE+qamXgSf4OnvOLEhno9GiiY2Njr2b/jCPQ348PI5sSGODHo3Z/TJYSk1MZOn0V89bs54XO\ndXnsxlqeLskYt3BnwMQAldO9rkSG01aqGqeqZ52XY4DmzvO7gShVjVfVeGAhEAGEOevtUFUFPgfa\nOOv0Ab5ynn+B6xTdBVR1tKqGq2p46dKlr2b/TDqufkwTNh04wRvWj7mos8kpPDp1BQvXH+TV2+sz\nqF0NT5dkjNu4M2CWA7VEpJqIBAE9gbnpFxCR8uledgE2Oc/34DT1naOWds5n+4D6IpKWDB3TrbPf\nWQ6gA7Ath/fHZKFD3bIMaledqUv3MM/6MRdISEph4OQV/LDpMG/c1ZAHr63m6ZKMcSu3Dcuqqski\nMgRYBPgD41V1g4gMA6JVdS4wVES6AMnAUaCvs/osXCGxDtdptW9VdR6AiLwO/CIiScDudOsMAEY6\nV5olAAPdtW/m4p65uQ7Ru/7iha/W0bBiMaqFev9o0jnhdGIyAyZH88eOON7p2ogeLa7xdEnGuJ24\nzjTlT+Hh4RodHe3pMnzOvmNnuO2DX6lQrABfPdom348AHH82mQcnLid611Heu7cJ9zSr5OmSjLkq\nIrJCVcOzWs7u5Dc5rmLxAvz73iZsPHCCNxfk737MiYQk+oxfxordfzGyZ1MLF5OvWMAYt7ixXlkG\nXV+dz6L2MH9t/uzHHD+dxP1jl7Jm7zFG9WrKHU0qeLokY3KVBYxxm2duqUOza4rz/Jfr2JXP7o85\neiqRXmOj2HTgJJ/0bk6nhuWzXskYH2MBY9wm0N+PD3s1w99PGDwt/9wfcyT+LL3GRLH9cDyjH2jO\nTfXLerokYzzCAsa4VVo/ZsP+E/xzwaasV/Byh08k0HN0FLviTjG+bwtuqGPDCZn8ywLGuN1N9csy\n8PrqTIna7dP9mAPHz9BjdBQHjp1hUr+WtK2ZfwdCNQYsYEwuefaWOjT14X5MzF+n6fFpFEdOnmXy\nQy1pVT3/TeFgTEYWMCZXpI1X5ov9mN1xp+jxaRTHTifyWf9WNK+SvyafM+ZiLGBMrqlUouC5fsy/\nvvGNfszO2Hh6fBrF6cRkpg2IoEnl4p4uyZg8wwLG5Kqb6pdlwHXVmLxkN9+sO+Dpcq7KtkMn6TE6\niuTUVKYPjKBhxWKeLsmYPMUCxuS65zrVpek1xfm/WWvZHeed/ZhNB07Qc3QUAswYGEHdckWzXMeY\n/MYCxuS6tH6Mn9OPOZvsXf2Y9fuOEzkmiqAAP2YOak3NMkU8XZIxeZIFjPGISiUK8t69TVi/7wT/\n8qL7Y1bvPUavMVEUCgpg5sDWNlq0MZdgAWM8pmP9svS/thqTvKQfE73rKL3HLqV4wSBmDorgmlIF\nPV2SMXmaBYzxqOc61SWssqsfsyfutKfLuaionXE8MH4ZZYoE8/mg1lQqYeFiTFYsYIxHBQW4+jEi\n5Nl+zG/bjtB3wjIqFi/AjEERlCsW4umSjPEKFjDG4yqXdPVj1u07zlvfbPZ0OedZvOUwD05aTtVS\nhZg+MIIyRSxcjMkuCxiTJ9zcoBwPXVuNiX/sYmEe6cd8v/EQgyavoHbZwkwfEEFo4WBPl2SMV3Fr\nwIhIJxHZIiLbReT5TD7vKyKxIrLaefRP99lwEdkgIptE5AMREef9SBFZJyJrReRbEQl13p+Zbju7\nRGS1O/fN5Lz/61SXJpWL89yXnu/HLFx3gEc+W0G9CkWZ2j+CEoWCPFqPMd7IbQEjIv7AKKAzUB+I\nFJH6mSw6U1XDnMdYZ902QFugMdAQaAG0E5EAYCTQXlUbA2uBIQCq2iNtO8CXwFfu2jfjHkEBfnwU\n2RQBhkz3XD9mzup9DJm+irDKxfnsoZYUKxDokTqM8XbuPIJpCWxX1Z2qmgjMAO7M5roKhABBQDAQ\nCBwCxHkUco5oigLnjf/uvN8dmJ4TO2FyV+WSBXn33iasjfFMP2bWihienLma8ColmPRgS4qEWLgY\nc6XcGTAVgb3pXsc472XU1TndNUtEKgOo6hJgMXDAeSxS1U2qmgQ8AqzDFSz1gXEZtncdcEhVt+Xo\n3phcc0uDcjzY1tWP+XZ97vVjZizbw7Oz1tCmRigT+7WkUHBArn23Mb7InQEjmbynGV7PA6o6p7t+\nACYBiEhNoB5QCVcodRCR60UkEFfANAUq4DpF9kKGbUZyiaMXERkoItEiEh0bG3v5e2VyxfOd69Kk\nUjGenbWWvUfd34+ZsmQXz3+1jna1SzO2TzgFgvzd/p3G+Dp3BkwMUDnd60pkOJ2lqnGqetZ5OQZo\n7jy/G4hS1XhVjQcWAhFAmLPeDlVV4HOgTdr2nB7NPcDMixWlqqNVNVxVw0uXLn01+2fcKCjAj496\nNQNgyLSVJCanuu27xv32J6/M2UDH+mX59P7mhARauBiTE9wZMMuBWiJSTUSCgJ7A3PQLiEj5dC+7\nAGmDUu3Baeo7Ry3tnM/2AfVFJC0ZOqZbB+AmYLOqxuT43phcV7lkQd7t1oQ1Mcd5a6F7xiv77087\neGP+Rm5tVI6P72tGcICFizE5xW0nmVU1WUSGAIsAf2C8qm4QkWFAtKrOBYaKSBcgGTgK9HVWnwV0\nwNVrUeBbVZ0HICKvA7+ISBKwO9064Aoxa+77kE4Ny9GvbVUm/L6LVtVK0alhuRzb9gc/bmPE91u5\nM6wC/763CQH+dluYMTlJXGea8qfw8HCNjo72dBkmC4nJqdz7yR/8eeQUC4ZeR+WSVzcOmKry7++2\n8tHi7XRtVonh3Rrj75dZy9AYkxkRWaGq4VktZz+ymTwvrR+jXH0/RlV5e+FmPlq8nciWlXnXwsUY\nt7GAMV7B1Y9pzJqY47y98Mruj1FVhs3fyKe/7OSB1lX4512N8LNwMcZtLGCM1+jUsDx921Rl/O9/\nsmjDwctaNzVVefnr9Uz4fRcPXVuN17s0sHAxxs0sYIxXeeHWujSuVIxnv1iT7ftjUlKV579ay9Sl\ne3jkhhq8fFs9nKHtjDFuZAFjvEpwgD8fRTr9mOmrsuzHJKek8swXa/g8OobHb6zFc7fUsXAxJpdY\nwBivc00ppx+z9xjvfHvxfkxSSipPzFzN7FX7ePaWOjzZsbaFizG5yALGeKW0fsy43/7ku0z6MYnJ\nqQyZtpL5aw/w0q31GNy+pgeqNCZ/s4AxXuuFW+vSqGIxnsnQj0lISuGRz1awaMMhXrujPgOur+7B\nKo3JvyxgjNcKDvBnVK9mqMJjTj8mISmFAZOj+XHzYf55d0P6tq3m6TKNybdsPHLj1a4pVZDh3Rrz\nyNSVvDF/Izti41myM47h3RrTPbxy1hswxriNBYzxep0bladP6ypMWrIbP4ER3Ztwd9NKni7LmHzP\nAsb4hBdvq0diSirtapfJ0QExjTFXzgLG+ITgAH/euqexp8swxqRjTX5jjDFuYQFjjDHGLSxgjDHG\nuIUFjDHGGLewgDHGGOMWFjDGGGPcwgLGGGOMW1jAGGOMcQtRVU/X4DEiEgvs9nQd6YQCRzxdxCXk\n9fog79eY1+uDvF9jXq8PfL/GKqpaOquF8nXA5DUiEq2q4Z6u42Lyen2Q92vM6/VB3q8xr9cHVmMa\nO0VmjDHGLSxgjDHGuIUFTN4y2tMFZCGv1wd5v8a8Xt//t3fvMXJWdRjHv0/cNrUplkvVYKFZqm2B\nEEgrIAgS6rWsJA1Jo6KW0JCaiJKiRDH8URubeIu3GGi4SbgESyI0pXjBkFCEli4ttmV741JbhRUi\noIJQiNry+Mc5a6bDzO6U3ffMa/x9ks2+887JO8909/T3vuedPQfqn7Hu+SAyAnEPJoQQQkXiCiaE\nEEIlosAUJmmepCck7Zb0jTZtPiVpp6Qdkn5et4ySpklaK2mLpAFJfYXz3STpeUnb2zwvST/N+Qck\nzalZvs/lXAOSHpZ0Su0W8uMAAAYYSURBVMl8nWRsaHeapAOSFpTK1vDaI2aUdK6krbmv/K5O+SRN\nlnSPpMdyvkWF8x2b++mu/PpLWrSptq/Yjq9CX8DbgD8A04HxwGPAiU1tZgBbgCPy43fVMOP1wBfz\n9onAHwtnPAeYA2xv83wf8BtAwBnAIzXL98GGn+95pfN1krHhd+F+4NfAgrplBA4HdgLT8uPSfWWk\nfFcB38vb7wT+BowvmO9oYE7ePgx4skVfrrSvxBVMWacDu23vsf0v4A5gflObxcA1tv8OYPv5GmY0\n8I68PRl4tmA+bD9I6qztzAduddIPHC7p6DLpRs5n++Ghny/QDxxTJNjBGUb6NwS4DLgLKP07CHSU\n8bPAKttP5/ZFc3aQz8BhkgRMym33l8gGYPs525vz9ivALmBqU7NK+0oUmLKmAs80PB7kzT/wmcBM\nSesl9UuaVyxd0knGZcDnJQ2Szm4vKxOtY528h7q4hHQGWSuSpgIXANd2O8swZgJHSHpA0u8lXdTt\nQE2uBk4gnYBtA5bYfqMbQST1ArOBR5qeqrSv9IzVgUJH1GJf88f4ekjDZOeSzmwfknSS7Zcqzjak\nk4wXAjfb/qGkM4HbcsaudJ4WOnkPXSdpLqnAnN3tLC38BLjS9oF0Al5LPcD7gY8Abwc2SOq3/WR3\nY/3XJ4CtwIeB9wL3SXrI9j9KhpA0iXQlenmL1660r0SBKWsQOLbh8TG8eXhpEOi3/W9gr6QnSAVn\nU5mIHWW8BJgHYHuDpAmkeY26MpTSQifvoasknQzcCJxn+6/dztPCqcAdubhMAfok7be9uruxDjII\nvGh7H7BP0oPAKaR7DXWwCPiu082O3ZL2AscDG0sFkDSOVFxut72qRZNK+0oMkZW1CZgh6ThJ44HP\nAGua2qwG5gJImkIaBthTs4xPk84akXQCMAF4oWDGkawBLsqfkDkDeNn2c90ONUTSNGAVsLBGZ9sH\nsX2c7V7bvcCdwKU1Ky4AdwMfktQjaSLwAdJ9hrpo7CfvBmZRsC/nez8/A3bZ/lGbZpX2lbiCKcj2\nfklfBn5L+oTOTbZ3SPoW8KjtNfm5j0vaCRwAvlbyDLfDjFcAN0j6Culy+uJ8llaEpJWkIcQp+T7Q\nN4FxOf+1pPtCfcBu4DXSmWQxHeRbChwFrMhXCPtdeGLEDjJ23UgZbe+SdC8wALwB3Gh72I9dl8wH\nLAdulrSNNBR1pe2SMyyfBSwEtknamvddBUxryFhpX4m/5A8hhFCJGCILIYRQiSgwIYQQKhEFJoQQ\nQiWiwIQQQqhEFJgQQgiViAITQgihElFgQvgfkKel/+Vo24RQUhSYEMZA/kvo6E8hNIgOEcJbJKk3\nL+a0AtgMLJS0QdJmSb/IkwwiqU/S45LW5cWd2l5lSDpdaRGyLfn7rBZtlkm6TdL9kp6StLjh6UmS\n7syvd3ueLgRJSyVtkrRd0vVD+0OoUhSYEEZnFnAr8DHSJKAftT0HeBT4ap4I9DrSpJZnkxaeGs7j\nwDm2Z5OmlPl2m3YnA58EzgSWSnpP3j8buJy0ENx00nQhAFfbPs32SaSZh88/5HcawiGKuchCGJ0/\n2e6XdD7pP/X1+eJgPLCBNHvuHtt7c/uVwBeGOd5k4BZJM0jzvI1r0+5u268Dr0taS1oo7iVgo+1B\ngDz/VC+wDpgr6evAROBIYAdwz1t7yyF0JgpMCKOzL38XcJ/tCxuflDT7EI+3HFhr+4K8SNQDbdo1\nTyI49PifDfsOAD35KmoFcKrtZyQtI82AHUKlYogshLHRD5wl6X0AkiZKmkka8pqeiwXAp0c4zmTg\nz3n74mHazZc0QdJRpBl9h1svaKiYvJjvCy0YIUMIYyIKTAhjwPYLpIKwUtIAqeAcn4exLgXulbQO\n+Avw8jCH+j7wHUnrScsltLMR+FV+neW22y4SlVdDvYG0bO9qyi1eF/7PxXT9IVRM0iTbr+ZPbl0D\nPGX7x6M43jLgVds/GKuMIVQhrmBCqN7ifMN9B2kI7Lou5wmhiLiCCaELJC0CljTtXm/7S93IE0IV\nosCEEEKoRAyRhRBCqEQUmBBCCJWIAhNCCKESUWBCCCFUIgpMCCGESvwHxHBGBCn6P24AAAAASUVO\nRK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x818e278>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (gsearch3.best_score_, gsearch3.best_params_))\n",
    "test_means = gsearch3.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch3.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch3.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch3.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch3.cv_results_).to_csv('my_preds_reg_alpha_reg_lambda_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(reg_alpha), len(reg_lambda))\n",
    "train_scores = np.array(train_means).reshape(len(reg_alpha), len(reg_lambda))\n",
    "    \n",
    "for i, value in enumerate(reg_alpha):\n",
    "    pyplot.plot(reg_lambda, -test_scores[i], label= 'reg_alpha:'   + str(value))\n",
    "\n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'reg_alpha' )                                                                                                      \n",
    "pyplot.ylabel( '-Log Loss' )\n",
    "pyplot.savefig( 'reg_alpha_vs_reg_lambda1.png' )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "最优参数 ：‘reg_alpha': 1.5, ‘reg_lambda': 1。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": true
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
